iT邦幫忙

2026 iThome 鐵人賽

DAY 29
0
JavaScript

JS 核心重構:勇者轉職傳說系列 第 29

Day 28:【封印揭曉】萬物回歸!原來你這 30 天練的基礎,合起來就是「那柄聖劍」

  • 分享至 

  • xImage
  •  

本文同步分享於個人部落格:Liwen Chiou | Digital Architect & Full-Stack Engineer


🏆 傳奇之日:封印解除 🏆

「孩子,把你的背包放在桌上。今天,我們不練新招式。我要告訴你,你這 30 天到底在練什麼。」

你一直問我,這 27 天來不斷磨練這些零件,究竟是為了拿起哪一把傳說中的聖劍。

我總是叫你耐心等待,叫你先去學會如何搬運記憶體、如何封印變數、如何聽從資料的指令。你可能覺得我老糊塗了,覺得這些基礎與那把華麗的聖劍毫無關係。

現在,看好了。」


🛡️ 【公會大廳:真相的大門】

我拿起你背包裡那些看似不起眼的「零件」,將它們一個一個排在石桌上。

「這是 Day 03 的箭頭函式,你當時覺得它只是個語法糖。」
「這是 Day 04 的解構賦值,你覺得它只是為了少打幾個字。」
「這是 Day 07 的閉包,你當時為了搞懂它差點燒掉腦袋。」

我將這些零件湊在一起,口中低吟著 Day 27 的咒語:「UI = f(state)」

剎那間,金色的光芒充斥了整個大廳。那些零件自動咬合、重組、升華。原本雜亂的 JS 代碼,在光芒中凝結成了一柄完美的、不斷跳動著資料流的長劍。

「這就是 React。」 我將劍柄遞給你。「它不是什麼外星科技。它,就是你這 30 天來親手鍛造的 JS 基礎。」


💡 【導師講義:傳奇裝備對照表】

為了讓你徹底看穿聖劍的構造,導師幫你整理了這份 「轉職映射表」。你會發現,React 裡面的每一個名詞,你其實早就學過了。

冒險階段 你的 JS 核心裝備 React 聖劍的真面目 導師的白話註解
Day 03 箭頭函式 (Arrow Function) Functional Component 組件的「肉體」,一個回傳畫面的函式。
Day 04 解構賦值 (Destructuring) Props 接收 讓組件能優雅地拆開傳進來的寶箱 (Data)。
Day 06 展開運算子 (...) Immutable State Update 為了不弄壞舊資料,先影印一份再修改。
Day 07 閉包 (Closure) useState / useEffect Hooks 之所以能「記住」變數,全靠閉包。
Day 09 陣列方法 (map / filter) List Rendering 在 React 裡畫出怪物清單的唯一方法。
Day 12 短路判斷 (&& / ??) Conditional Rendering 決定畫面上要不要出現這個 NPC 的開關。
Day 20 Promise / Async / Await Data Fetching 獲取異世界資料的標配流派。
Day 27 資料驅動 (State-driven) The Soul of React 「只改資料,不碰 DOM」就是 React 的核心。

🛡️ 【本日圖解心法:聖劍結構圖】

導師的圖解心法: 看清楚。中心那顆核心是 State (Day 27),周圍纏繞著 閉包 (Day 07) 保護著它。劍刃是由 箭頭函式 (Day 03) 鍛造而成,而劍柄上的寶石則是 解構賦值 (Day 04)

React 聖劍結構圖


⚔️ 【戰術對抗:從 JS 到 React 的進化】

招式示範:計數器組件

❌ 冒險學弟:傳統 JS 的苦戰 (Day 18 程度)

let count = 0;
const btn = document.querySelector("#btn");
const display = document.querySelector("#display");

btn.addEventListener("click", () => {
  count++;
  display.textContent = count; // 💔 每一行都要手動動 DOM
});

✅ 勇者學長:React 的優雅姿態 (轉職後的樣子)

// 💡 原理就是 Day 03 (函式) + Day 07 (閉包) + Day 27 (資料驅動)
function Counter() {
  const [count, setCount] = useState(0); // 這裡利用了閉包來鎖住 count

  return (
    <button onClick={() => setCount(count + 1)}>目前的點擊次數:{count}</button>
  ); // 💡 只管宣告畫面長什麼樣子,不理會 DOM 操作
}

🏰 【勇者精英課:為什麼我們要用框架?】

既然 React 就是 JS,那為什麼我們不直接寫 JS 就好?

導師告訴你:因為 React 是一個「極其勤奮且聰明的僕人」
在 Day 27,我們學會了「重新投影」的思維,但我們的 render 函式很暴力,每次都是毀掉整塊 HTML 重新生成。

React 的聖劍裡內建了 「虛擬 DOM (Virtual DOM)」。它會拿著兩張照片快速比對,只在那 0.01% 有變動的地方輕輕動一下手術。這就是為什麼你的網頁在大規模更新時,依然能流暢得像絲綢一樣。


🛖 【營火叮嚀:導師的經驗談】

很多冒險者在學 React 的第一天,就被那些奇形怪狀的語法嚇跑了。他們覺得那是新的語言,覺得自己這輩子都學不會。

其實,那是因為他們沒有像你一樣,先花 27 天去磨練 JS 的靈魂。

只要你記得:「框架會變換名字,但 JS 的底層邏輯永恆不變。」 當你握住 React 聖劍的那一刻,你會感覺到一股熟悉的熱流。那是你過去 27 天流過的汗水,在對你發出共鳴。


天色微亮,營火雖已燃盡,但你眼中卻閃爍著領悟的光芒。在前往演武場挑戰關卡前,我已經幫你把靈魂碎片精煉成了這份「戰術錦囊」。拿好它,今日的任務不再是負擔,而是你證明自我的舞台。去吧,公會的英雄榜在等著你的戰報。

📝 【夥伴筆記:今日修煉精華】

  • React 的本質:一個強大的 JS 工具庫,負責幫你處理繁瑣的 DOM 更新。
  • 映射思維:看到 Props 想到 解構,看到 State 想到 閉包
  • 轉職心法:忘記「修改標籤」,專注於「管理資料」。

🎯 【實戰演武場】

  1. 📜 本日實戰任務題目 (CodePen:JS vs React 對照)
  1. 任務需求
    • [ ] 閱讀 CodePen 中的兩段代碼,指出 React 版本中哪一部分對應了 Day 07 的閉包。
    • [ ] 試著解釋:為什麼在 React 中我們不需要寫 document.querySelector

📚 【圖書館卷軸:延伸學習】


上一篇
Day 27:【戰略指揮】資料驅動 (State-driven):從動手肌肉,到下達腦袋指令
下一篇
Day 29:【實戰】重鑄你的傳奇裝備:將「任務佈告欄」升級為聖劍版
系列文
JS 核心重構:勇者轉職傳說31
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言